Skip to content

feat(compat): add vendor compatibility translation edge#12

Closed
kylehounslow wants to merge 1 commit into
mainfrom
feat/compat
Closed

feat(compat): add vendor compatibility translation edge#12
kylehounslow wants to merge 1 commit into
mainfrom
feat/compat

Conversation

@kylehounslow

@kylehounslow kylehounslow commented May 4, 2026

Copy link
Copy Markdown
Owner

Description

Adds a compat/ package and a docker-compose.compat.yml overlay that lets Datadog, Jaeger, and Splunk HEC agents send telemetry to observability-stack without application code changes. Includes public-facing migration guides under docs/send-data/from-vendor/ and a contributor writing tenets section in CONTRIBUTING.md.

The overlay is opt-in and follows the existing INCLUDE_COMPOSE_* activation pattern. The base collector, its config, and all existing pipelines are unchanged.

Architecture

vendor agents ──▶ otel-collector-compat ──OTLP──▶ otel-collector (base, unchanged) ──▶ Data Prepper / Prometheus ──▶ OpenSearch
                  (new — this overlay)

OTLP apps ─────────────────────────────────────▶ (direct to base, no compat hop)

otel-collector-compat is a dedicated edge collector that runs upstream opentelemetry-collector-contrib receivers. Each receiver accepts its vendor wire protocol, translates to the OTel data model via upstream translator packages, and forwards OTLP to the base collector. All enrichment and downstream routing continues to happen in the base pipeline.

Modern OpenTelemetry SDK applications bypass the compat hop and continue sending OTLP directly to the base collector on 4317/4318.

Wire protocols supported

Signal Receiver Default port Upstream stability
Datadog traces datadogreceiver 8126/tcp Alpha
Datadog metrics datadogreceiver 8126/tcp Development
Datadog logs datadogreceiver 8126/tcp Development
DogStatsD metrics statsdreceiver 8125/udp Beta
Jaeger Thrift HTTP jaegerreceiver 14268/tcp Beta
Jaeger gRPC jaegerreceiver 14250/tcp Beta
Splunk HEC logs splunkhecreceiver 8088/tcp Beta
Splunk HEC metrics splunkhecreceiver 8088/tcp Beta

All upstream receiver READMEs are linked from the per-vendor docs. Attribute translation behavior is defined upstream — per-vendor docs list the 3–5 canonical attributes most users encounter and defer to upstream sources for the rest.

SignalFx is not included. The upstream signalfxreceiver is deprecated with explicit guidance to migrate to OTLP.

Activation

echo 'INCLUDE_COMPOSE_COMPAT=docker-compose.compat.yml' >> .env
docker compose up -d

Adds otel-collector-compat plus a bundled Jaeger hotrod demo on port 8080 that emits OTLP directly to the base collector (for validating the OTLP path end-to-end).

Pipelines

Signal Receivers
Traces datadog, jaeger
Metrics datadog, statsd, splunk_hec
Logs datadog, splunk_hec

The compat collector uses only the batch processor — no transforms, no enrichment. Those remain in the base collector.

Validation

End-to-end validation with real vendor client libraries:

Path Client Result
Datadog trace-agent dd-trace-py 4.8.0 + FastAPI + patch_all() 42 spans in otel-v1-apm-span-*. Resource-level service.name, service.version, deployment.environment.name preserved. instrumentationScope.name: Datadog. Custom span tags and parent/child relationships intact. FastAPI auto-instrumentation spans + manual tracer.trace() spans both present.
Splunk HEC logs splunk_handler 3.0.0 (Python logging handler) 5 log records in logs-otel-v1-*. com.splunk.source, com.splunk.sourcetype, com.splunk.index preserved as resource attributes.
Jaeger modern OTLP jaegertracing/example-hotrod:1.60 40 spans, 6-service topology, parent/child chain intact, visible in APM service map and Discover Traces.

Gotchas discovered during validation (documented in vendor pages):

  • Datadog: 128-bit trace IDs from Datadog-instrumented services are feature-gated upstream (Enable128BitTraceID, off by default). Trace IDs appear with upper 8 bytes zeroed without the flag.
  • Datadog: Manual tracer.trace() spans get SPAN_KIND_UNSPECIFIED — the upstream receiver only assigns explicit kinds for HTTP/DB/gRPC/AWS SDK span names.
  • Splunk HEC: host.name gets overwritten downstream by the base collector's resource detection. Users relying on HEC host for per-sender identification should route it to a different attribute via hec_metadata_to_otel_attrs.
  • Splunk HEC: HEC has no native severity field; severityText/severityNumber will be empty. Python logging levels from clients like splunk_handler are embedded in the event body, not structured.
  • Splunk HEC: Client libraries vary in how they ship custom fields (HEC fields vs. JSON-serialized event). Verify your client's behavior before relying on field-level queries.

Starlight docs build was validated with npm run build — 115 pages built, all internal links resolve.

Documentation

New public docs under docs/starlight-docs/src/content/docs/send-data/from-vendor/:

  • index.md — overview, architecture, decision table, port customization, links to viewing data
  • datadog.md — migration guide with decision table, DD_AGENT_HOST setup per library, canonical attribute mapping, caveats
  • jaeger.md — OTLP path + legacy wire protocol path, decision table, configuration examples
  • splunk.md — HEC endpoint setup, decision table, canonical metadata mapping, caveats including the host.name and severity findings above

Sidebar entry added via astro.config.mjs; cross-link from /docs/send-data/ overview.

CONTRIBUTING.md extended with a new "Writing Tenets (for agents)" section covering: framing, maintenance hygiene, accuracy, public-doc page structure, repo README conventions, and the principle that real-validation caveats are more trustworthy than theoretical ones.

Files

New:

  • compat/README.md — overview + decision table + activation
  • compat/collector/config.compat.yaml — edge collector config
  • compat/collector/README.md — developer notes (local dev workflow, debug verbosity)
  • compat/vendors/{datadog,jaeger,splunk}/README.md — thin repo READMEs pointing to public migration guides
  • docker-compose.compat.yml — overlay service definitions (edge collector + hotrod)
  • docs/starlight-docs/.../from-vendor/{index,datadog,jaeger,splunk}.md — public migration guides

Changed:

  • docker-compose.yml — one line added to include: block (INCLUDE_COMPOSE_COMPAT)
  • docs/starlight-docs/astro.config.mjs — one sidebar entry
  • docs/starlight-docs/src/content/docs/send-data/index.md — one cross-link
  • CONTRIBUTING.md — new Writing Tenets section

Not included (future work)

  • Legacy Jaeger wire protocol end-to-end validation with a real jaeger-client-* application (modern OTLP path is validated; the jaegerreceiver loads cleanly)
  • DogStatsD end-to-end with a real DogStatsD client (receiver loads; no dedicated integration test)
  • Instrumented example applications under compat/examples/ for Python and Go Datadog SDKs

Issues Resolved

N/A — no pre-existing issue.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@kylehounslow kylehounslow force-pushed the feat/compat branch 2 times, most recently from 045c7ce to 57185ba Compare May 5, 2026 04:27
@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@kylehounslow kylehounslow force-pushed the feat/compat branch 2 times, most recently from 2830c94 to ada4134 Compare May 5, 2026 05:06
@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

1 similar comment
@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@kylehounslow kylehounslow force-pushed the feat/compat branch 2 times, most recently from 0c4c49b to f06f47f Compare May 5, 2026 05:37
@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

1 similar comment
@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

Adds compat/ package and docker-compose.compat.yml overlay that accepts
telemetry from Datadog, Jaeger (legacy wire protocol), and Splunk HEC
agents and forwards OTLP to the base observability-stack collector.
Includes customer-facing documentation under docs/starlight-docs and a
Writing Tenets section in CONTRIBUTING.md.

The overlay is opt-in and follows the existing INCLUDE_COMPOSE_*
activation pattern. The base collector, its config, and all existing
pipelines are unchanged.

Activation:

    echo 'INCLUDE_COMPOSE_COMPAT=docker-compose.compat.yml' >> .env
    docker compose up -d

Compat collector pipelines:
- traces:  [datadog, jaeger]
- metrics: [datadog, statsd, splunk_hec]
- logs:    [datadog, splunk_hec]

Modern OpenTelemetry SDK applications bypass the compat hop and send
OTLP directly to the base collector on 4317/4318.

Public documentation added under /docs/send-data/from-vendor/:
- index.md (overview + architecture + decision table)
- datadog.md, jaeger.md, splunk.md (per-vendor migration guides)
- From Vendor Agents sidebar entry added via astro.config.mjs
- Cross-link added from /docs/send-data/ overview

Validated end-to-end with real vendor SDKs:
- Datadog: dd-trace-py + FastAPI + patch_all() -> 42 spans in OpenSearch
  with service.name, service.version, deployment.environment.name
  preserved; instrumentationScope Datadog; parent/child chains intact
- Splunk HEC: splunk_handler (Python logging) -> 5 log records in
  logs-otel-v1-* with com.splunk.source/sourcetype/index preserved
- Jaeger OTLP: jaegertracing/example-hotrod demo -> 40 spans, 6-service
  topology, visible in APM and Discover Traces

Starlight docs build validated (115 pages, all internal links resolve).

SignalFx is not supported. The upstream signalfxreceiver is deprecated
with explicit guidance to migrate to OTLP.

Signed-off-by: Kyle Hounslow <kylhouns@amazon.com>
@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown

✅ Docs preview build completed successfully! All tests passed.

@kylehounslow

Copy link
Copy Markdown
Owner Author

Merged upstream as opensearch-project/observability-stack#224. Closing this fork PR.

@kylehounslow kylehounslow deleted the feat/compat branch May 6, 2026 23:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant